昨天真的解不出來到底要怎麼上人物。
有點沮喪啊。
但是,冷靜過後還是充滿鬥志,因為憑著語感,感覺就是快成功了。
一樣不囉唆,先上程式碼:
import pygame
import random
import os
pygame.init()
black = (0, 0, 0)
green = (91,231,196)
gameNaughtybox = pygame.display.set_mode((600,600))
pygame.Surface((600,600))
dest = (0,0)
Frame_per_seconds = 27
pygame.display.set_caption ("Naughty Box")
walkRight = [pygame.image.load('/Users/RGB/iThome/Naughty box music/cutegirlfiles/Walk (1).png'),
pygame.image.load('/Users/RGB/iThome/Naughty box music/cutegirlfiles/Walk (2).png'),
pygame.image.load('/Users/RGB/iThome/Naughty box music/cutegirlfiles/Walk (3).png'),
pygame.image.load('/Users/RGB/iThome/Naughty box music/cutegirlfiles/Walk (4).png'),
pygame.image.load('/Users/RGB/iThome/Naughty box music/cutegirlfiles/Walk (5).png')]
walkLeft = [pygame.image.load('Angel-1-7.png'), pygame.image.load('Angel-1-6.png')]
character=[pygame.image.load ('cutegirlfiles/Idle (1).png')]
bg = pygame.image.load('pipo-battlebg007b.png')
gameNaughtybox.blit(bg,(0,0))
pygame.display.flip()
x = 50
y = 50
width =64
height = 64
vel = 8
isJump = False
jumpCount = 15
left = False
right =False
walkCount = 0
run = True
clock = pygame.time.Clock()
class Player(pygame.sprite.Sprite):
def__init__(gameNaughtybox):
pygame.sprite.Sprite.__init__(gameNaughtybox)
gameNaughtybox.images= []
img=pygame.image.load(os.path.join('cutegirlfiles/Idle (1).png')).convert()
gameNaughtybox.images.append(img)
gameNaughtybox.image= character.images[0]
gameNaughtybox.rect = character.image.get_rect()
def redrawGameWindow():
global walkCount
gameNaughtybox.blit(bg,(0,0))
if walkCount + 1 >= Frame_per_seconds:
walkCount = 0
if left:
gameNaughtybox.blit (walkLeft[walkCount//3], (x,y))
walkCount +=1
elif right:
gameNaughtybox.blit (walkRight[walkCount//3], (x,y))
walkCount +=1
else:
gameNaughtybox.blit(character)
pygame.display.update()
while run:
gameNaughtybox.blit(bg,(x,0))
x -= 1
clock.tick(Frame_per_seconds)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys [pygame.K_LEFT] and x > vel:
x -= vel
left = True
right = False
bg.scroll(5,0)
elif keys [pygame.K_RIGHT] and x < 600 - width - vel:
x += vel
left = False
right = True
bg.scroll(-5,0)
else:
right = False
left = False
walkCount = 0
if not (isJump):
if keys [pygame.K_SPACE]:
isJump = True
right = False
left = False
walkCount = 0
else:
if jumpCount >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y -= (jumpCount ** 2) * 0.5 * neg
jumpCount -= 1
else:
isJump = False
jumpCount = 10
redrawGameWindow()
pygame.quit()
今天的重點除了研究出怎麼上載角色以外,也精簡了人物的移動方式。
本來是想說可以讓人物在整個遊戲框中到處跑。
但是,考量到這樣變數會很多,反而出錯率高,因此決定捨棄電腦上下鍵,人物僅能左右移動。
這對新手來說應該也蠻重要的,千萬別學我眼高手低。
雖然我覺得是有可能成功,但就是需要時間去一直反覆檢查 if/else。如果初學者覺得特別玻璃心,一定要讓人物移動精簡,避免檢查太多變數消耗熱情。
雖然我覺得我的熱情並沒有被消耗掉啦 哈
精簡人物移動,只是把程式碼拿掉了,應該不用多做解釋。
但是,我仍然有留存,畢竟,以後還是想讓它移動!!!)激動拍桌
好的,倒數第二天候補。
真的不知道怎麼能這麼不隨便寫文...
完全跟我的題目精神不符合啊)笑哭
重點還是放在角色上載這裡。
今天發現原來做遊戲真的不是想像中簡單,因為我今天居然發現 class
這個關鍵字。
原來,不是只是要把圖片上載這麼簡單,還要「分類」角色。以我的理解,就是每個遊戲都一定會有一個角色,只要是「角色」就會有很多變數要設定,譬如角色大小、起始位置、動作等等。
因此, class
這個關鍵字就是在替角色做分類。依照閱讀的資料理解,如果牽涉到多個角色,可能有些特徵會相似,因此會需要分類不同的角色。很多教程說這樣後續建置每個角色的動作會比較輕鬆,雖然我目前是感覺不出來啦...)賭氣
總之,我先想辦法整理成下面這段程式碼
class Player(pygame.sprite.Sprite):
def__init__(gameNaughtybox):
pygame.sprite.Sprite.__init__(gameNaughtybox)
gameNaughtybox.images= []
img=pygame.image.load(os.path.join('cutegirlfiles/Idle (1).png')).convert()
gameNaughtybox.images.append(img)
gameNaughtybox.image= character.images[0]
gameNaughtybox.rect = character.image.get_rect()
整段程式碼,我最不能理解的是 os.path
完全還沒時間搞懂那是什麼。
因為我正在試圖搞懂昨天說的關鍵字 雪碧
... 額不是,是 sprite
。
我實在不能理解為什麼網路上的教學都是寫這樣 pygame.sprite.Sprite
... 為什麼要寫兩個sprite,感覺很像跳針,完全不能理解這公式在寫什麼...
另外,sprite
後面似乎會伴隨著 rect
,可是 rect
通常都是使用在向量方格上。但是,我又不是像最初那樣是要畫向量方格,如果要用圖片的話,就還在摸索要怎麼使用 rect
。
最後一個小問題。
其實我覺得這個是智商問題(小聲
True/False 看多了真的就覺得很混亂,到底現在是 True 還是 False,傻傻分不清楚啊。
不知道有沒有人有比較能清楚又快速的辨別方式?
我覺得這真的不是一天就能弄懂的。
應該要多看其他人的code,然後檢視自己的原始碼,然後必要的時候,放下錯誤,去加入新的挑戰,先挑戰其他小的項目,像是我做累了就想說來測試怎麼讓背景滾動。然後又再回頭思考主要的題幹,這樣才能一直保持熱情,也不會偏離航道太遠。
雖然看起來沒什麼內容,但是相較於昨天,真的有弄懂比較多架構和關鍵字的意思。
總之,收工!
明天繼續努力!!